//配置axios
import axios from "axios";
//引入element ui
import { MessageBox, Message, Loading } from 'element-ui';
//引入storage方法
import storage from "./storage";

let http = axios.create({
    baseURL: "/api",
    timeout: 5000,//超时设置
    withCredentials: true,//携带本地凭据 比如cookie
})

let fullScreenLoading = null

//全局的请求拦截器 对接口的请求批量进行统一处理
http.interceptors.request.use(config => {
    //先获取本地的token 然后携带给后端
    let token = storage.get('qf-token')
    // console.log(token);
    config.headers['authorization'] = token
    //config就是所有的请求配置

    //登入的时候打开加载动画
    console.log(config);
    if (config.url.indexOf('login') !== -1 || config.url.indexOf('wechatLogin') !== -1) {
        fullScreenLoading = Loading.service({
            lock: true,
            text: 'Loading',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
        })
    }

    return config
})

//全局响应拦截器 对错误统一处理
http.interceptors.response.use(config => {
    // console.log('config==',config);
    if(fullScreenLoading){
        fullScreenLoading.close()
        fullScreenLoading = null
    }
    let { state, msg } = config.data
    if (!state) {
        //后台响应了错误的结果
        MessageBox({
            message: msg,
            title: '错误提示',
            type: 'error'
        })
    }

    //10022 token过期 1004 sessiion过期 10026 没有权限
    //如果是这几个状态码，需要清掉本地缓存，清掉token
    let { code } = config.data

    if (code === '10022' || code === '1004') {
        Message.error('登入过期，请重新登入')
        //清除token
        storage.rm('qf-token')
        location.reload()
    }

    return config//如果不return axios拿不到响应的结果
})

export default http 